<?php
//получает номер трансмиттала, читает EXCEL файл накладной
//для каждого файла проверяет, есть ли такой в базе
//если нет, пробует скопировать его с сервера в хранилище
//если удалось, пишет в базу данных новую запись



//загружаем функцию поиска файлов
include_once './scan.php';

/** Error reporting */
error_reporting(E_ALL);

/** Include path **/
ini_set('include_path', ini_get('include_path').';./Classes/');

/** PHPExcel */
include 'PHPExcel.php';
//подключаемся к базе
include_once './db_connect.php';

//Максимальное время работы скрипта 1 час
set_time_limit(GET_TIME);

//читает накладную и выдает двумерный массив массив со списком чертежей
//[drawing] -> ( [title] - описание, [status] - статус )
function xls($name) {
    //Обнуляем массив листов
    $list = NULL;
    
    $objPHPExcel = PHPExcel_IOFactory::load($name);
    //получаем дату последнего изменения
    //она же дата трансмитала
    $list['date_in'] = $objPHPExcel->getProperties()->getModified();
//    echo 'DATE-IN = '.$list['date_in'].'<br/>';

    //Читаем первый лист
    $objPHPExcel->setActiveSheetIndex(0);

    //Читаем количество листов
    $sheet_count = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(C_COUNT, R_COUNT)->getCalculatedValue();
    $sheet_count = explode(' ', $sheet_count);
    $sheet_count = $sheet_count[count($sheet_count)-1];
    //Читаем описания документов
    
    for ($i=R_BEG_1;$i<=R_END_1;$i=$i+DRW_ROW) {
        $drawing = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(C_DRW, $i)->getCalculatedValue();
        $title = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(C_TITLE, $i)->getCalculatedValue();
        $status = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(C_ST, $i)->getCalculatedValue();

        if ($drawing != '') {$list[$drawing]['title'] = $title; $list[$drawing]['drw_status'] = $status;}
    }

    if ($sheet_count > 1) {
        //Читаем второй лист
        $objPHPExcel->setActiveSheetIndex(1);
        $i=R_BEG_2;
        //читаем пока не получим пустую ячейку на последней странице
        while ( ($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(C_DRW, $i)->getCalculatedValue() != '')
                 || ( $i == (R_BEG_2 + ($sheet_count-2)*(PAGE_DRW+1)*DRW_ROW) )       ) {
            if  ( ($i != R_BEG_2) && ( (($i-R_BEG_2)/DRW_ROW) % (PAGE_DRW+1) == 0 ) ) {$i=$i+DRW_ROW; continue;}
            $drawing = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(C_DRW, $i)->getCalculatedValue();
            $title = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(C_TITLE, $i)->getCalculatedValue();
            $status = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(C_ST, $i)->getCalculatedValue();

            $list[$drawing]['title'] = $title; $list[$drawing]['drw_status'] = $status;
            $i=$i+DRW_ROW;
        }

    }
    $objPHPExcel->disconnectWorksheets();
    unset($objPHPExcel);
    
    return $list;
}

//Получаем название трансмитала
$transmit = $_POST['transmit'];
echo "<b>$transmit</b><br/>";

$dbh = mysql_connect(HOST, USER, PSWD) or die("Не могу соединиться с MySQL.");
mysql_select_db(DATABASE) or die("Не могу подключиться к базе.");
$res = mysql_query("SET NAMES utf8");

//Счетчик записанный файлов
$pdf_count = 0;

//читаем корневую директорию сервера
if ($server_handle = opendir(SERVER_PATH)) {
    while (false !== ($entry = readdir($server_handle))) 
        if ($entry != "." && $entry != ".." && //выбрасываем лишнее
            preg_match('|'.$transmit.'.*|', $entry) ) { //проверяем совпадение с входящим трансмиталлом
            
            //читаем xls файлы данного трансмиталла
            if (!is_file(SERVER_PATH.SEPARATOR.$entry.SEPARATOR.$transmit.'.xls'))
                echo '<font color="red">No excel file for '.$transmit."</color><br/>";
            else {
                $xls = xls(SERVER_PATH.SEPARATOR.$entry.SEPARATOR.$transmit.'.xls');
                //перебираем все файлы *.pdf данного трансмиталла, кроме накладной
                $files = scan('|[\d]+\s.*_Rev[\d]{2}_[\d]{2}\.pdf|',SERVER_PATH.SEPARATOR.$entry);
                foreach ($files as $pdf)
                    if ( (!preg_match('|'.$transmit.'[\s]*\.pdf|', $pdf['filename'])) //отсекаем PDF с накладной
                       && (preg_match('|[\d]+\s.*_Rev[\d]{2}_[\d]{2}\.pdf|', $pdf['filename'])) ) { //проверяем шаблон PDF
                                //разбираем имя файла
                                list($project,$drawing,$revision,$part) = parse_filename($pdf['filename']);

                                //Если найден файл, но его нет в накладной - пропускаем и пишем предупреждение
                                if (!isset($xls[$project.' '.$drawing]))
                                    echo "There isn't $project $drawing file in XLS transmital<br/>";
                                else {
                                    //получаем из накладной описание и статус
                                    $title = $xls[$project.' '.$drawing]['title'];
                                    $drw_status = $xls[$project.' '.$drawing]['drw_status'];

                                    //получаем uin
                                    $uin = uniqid();
                                    //получаем текущую дату
                                    $date_in = date('Y-m-d',$xls['date_in']);
                                    //собираем директорию в хранилище
                                    $symbol = $drawing[0];
                                    $path = substr($drawing,1);
                                    $path = explode('-', $path);
                                    $path[count($path)-1] = substr($path[count($path)-1],0,3);
                                    $path = $symbol.SEPARATOR.implode(SEPARATOR, $path);

                                    //проверяем есть ли уже в базе такая запись
                                    $sql = "SELECT * FROM ".BASE."
                                    WHERE project LIKE '%$project%'
                                    AND drawing LIKE '%$drawing%'
                                    AND revision = '".(int)$revision."'
                                    AND part = '".(int)$part."'";
    //                              echo "$sql<br/>";

                                    //Собираем имя файла
                                    $name = $project.' '.$drawing.'_Rev'.$revision.'_'.$part;
    //                              echo "NAME = $name<br/>";

                                    $result = mysql_query($sql);
                                    if (mysql_errno () > 0) echo mysql_errno().'  '.mysql_error().'<br/>';
                                    if (mysql_num_rows($result) > 0)
                                        echo '<font color="red">'.$name.'.pdf - ALREADY IN DATABASE</font><br/>';
                                    else {
                                        //пробуем скопировать pdf файл
                                        //проверяем наличие папки в хранилище
                                        if ( (!is_dir("../".STORAGE_PATH.SEPARATOR.$path)) &&
                                             (!mkdir("../".STORAGE_PATH.SEPARATOR.$path, 0, true)) ) //если нет, создаем папку
                                                echo '<font color="red">Make folder '.STORAGE_PATH.SEPARATOR."$path - FAILED</font><br/>";
                                        else {
                                            //если файл уже существует или не скопировался - перескакиваем
                                            if ( (is_file("../".STORAGE_PATH.SEPARATOR.$path.SEPARATOR.$name.'.pdf')) ||
                                                (!copy($pdf['path'].SEPARATOR.$pdf['filename'],
                                                        "../".STORAGE_PATH.SEPARATOR.$path.SEPARATOR.$name.'.pdf')) )
                                                   echo '<font color="red">'.$name.'.pdf - ALREADY IN REPOSITORY</font><br/>';
                                            else {
                                                //формируем запрос для новой записи
                                                $sql = "INSERT INTO ".BASE." SET
                                                  uin = '$uin',
                                                  project = '$project',
                                                  drawing = '$drawing',
                                                  revision = '$revision',
                                                  part = '$part',
                                                  drw_status = '$drw_status',
                                                  title = '$title',
                                                  date_in = '$date_in',
                                                  transmit_in = '$transmit',
                                                  path = '$path'";

    //                                            echo $sql.'<br/>';
                                                mysql_query($sql);
                                                if (mysql_errno () > 0) echo mysql_errno().'  '.mysql_error().'<br/>';
                                                else {
                                                   $pdf_count++;
                                                   echo '<font color="green">'.$name.'.pdf - ADDED</font><br/>';
                                                }
                                            }
                                        }
                                    }
                                }

                            }
            }
        }
    closedir($server_handle);
}
echo 'There are '.$pdf_count.' new files in repository.<br/>';
//закрываем соединение с базой
mysql_close($dbh);
?>